* Drivers of parliamentary opposition in European Union politics: Institutional factors or party characteristics?
* Thomas Persson, Christer Karlsson, Felix Lehmann, and Moa Mårtensson
* Do-file
* DOI: 10.1080/13501763.2022.2162567
* Journal of European Public Policy
* Replication material

* Main text

* Table 1
eststo clear
* effect of oversight institutions on critique
eststo: xi: logistic CRITIQUE_DUMMY inst_str_Winzen eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear i.PolicyArea, cluster(Country)
estadd local country_dummies "No"
estadd local policy_dummies "Yes"

* effect of oversight institutions on alternatives
eststo: xi: logistic ALTERNATIVE_DUMMY inst_str_Winzen eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear i.PolicyArea, cluster(Country)
estadd local country_dummies "No"
estadd local policy_dummies "Yes"

* interaction effect of oversight institutions and EU position on critique
eststo: xi: logistic CRITIQUE_DUMMY eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear c.inst_str_Winzen#c.eu_position i.PolicyArea i.Country, cluster(Country)
estadd local country_dummies "Yes"
estadd local policy_dummies "Yes"

* interaction effect of oversight institutions and EU position on alternatives
eststo: xi: logistic ALTERNATIVE_DUMMY eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear c.inst_str_Winzen#c.eu_position i.PolicyArea i.Country, cluster(Country)
estadd local country_dummies "Yes"
estadd local policy_dummies "Yes"

esttab using 1.rtf, replace margin label varwidth(30) eform se stats(r2_p N country_dummies policy_dummies, fmt(a2) label("Pseudo R²" "Observations" "Country FEs" "Policy area controls")) compress star (* 0.1 ** 0.05 *** 0.01) unstack nomtitles b(%9.3fc) keep(inst_str_Winzen Arena electionyear eu_position Government_Opposition_Party  Seat_Share  lrgen  c.inst_str_Winzen#c.eu_position _cons) order(inst_str_Winzen Arena electionyear eu_position Government_Opposition_Party  Seat_Share  lrgen  c.inst_str_Winzen#c.eu_position _cons) note("Country-clustered robust standard errors in parentheses; Odds Ratios reported")

* Figure 1
set scheme s2mono

twoway (scatter average_country_critique inst_str_Winzen, mlabel(Country) mlabposition(12))|| (scatter average_country_alternative inst_str_Winzen, mlabel(Country) mlabposition(12)) || (lfit average_country_critique inst_str_Winzen) || (lfit average_country_alternative inst_str_Winzen,), ytitle(Share of critique/alternatives) legend(label(1 "Share of critique") label (2 "Share of alternatives"))

* Figure 2
set scheme s2mono

twoway (scatter average_party_critique EU_Position if NationalPartyNew != 34 & NationalPartyNew != 37)|| (scatter average_party_alternative EU_Position if NationalPartyNew != 34 & NationalPartyNew != 37)|| (lfit average_party_critique EU_Position, mlabposition(12)) || (lfit average_party_alternative EU_Position, mlabposition(12)), ytitle(Share of critique/alternatives) legend(label(1 "Share of critique") label (2 "Share of alternatives"))

* Figure 3
set scheme s2mono

xi: logistic CRITIQUE_DUMMY eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear c.inst_str_Winzen#c.eu_position i.PolicyArea i.Country, cluster(Country)
margins, dydx(inst_str_Winzen) at(eu_position=(1(1)7))
marginsplot, ytitle(Effects on linear prediction) title(Critique, size(medlarge))

* Figure 4
set scheme s2mono

xi: logistic ALTERNATIVE_DUMMY eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear c.inst_str_Winzen#c.eu_position i.PolicyArea i.Country
margins, dydx(inst_str_Winzen) at(eu_position=(1(1)7))
marginsplot, ytitle(Effects on linear prediction) title(Alternatives, size(medlarge))





* Appendix

* Table A3

asdoc sum CRITIQUE_DUMMY ALTERNATIVE_DUMMY inst_str_Winzen eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear, label replace dec(3)

* Figure A1
set scheme s2mono

graph bar SUPPORT_DUMMY ALTERNATIVE_DUMMY CRITIQUE_DUMMY, legend(label(1 "Support") label(2 "Alternatives") label (3 "Critique"))

* Figure A2
set scheme s2mono

graph bar SUPPORT_DUMMY ALTERNATIVE_DUMMY CRITIQUE_DUMMY, over(Arena) legend(label(1 "Support") label(2 "Alternatives") label (3 "Critique"))

* Figure A3
set scheme s2mono

graph bar SUPPORT_DUMMY ALTERNATIVE_DUMMY CRITIQUE_DUMMY, over(Country) legend(label(1 "Support") label(2 "Alternatives") label (3 "Critique"))

* Figure A4
set scheme s2mono

graph bar SUPPORT_DUMMY ALTERNATIVE_DUMMY CRITIQUE_DUMMY, over(Country, label(angle(45))) by(Arena) legend(label(1 "Support") label(2 "Alternatives") label (3 "Critique")) 

* Figure A5
set scheme s2mono

graph bar SUPPORT_DUMMY ALTERNATIVE_DUMMY CRITIQUE_DUMMY if PolicyArea != 5 & PolicyArea != 16, legend(label(1 "Support") label(2 "Alternatives") label (3 "Critique"))

* Figure A6
set scheme s2mono

graph bar SUPPORT_DUMMY ALTERNATIVE_DUMMY CRITIQUE_DUMMY if PolicyArea == 5 | PolicyArea == 16, legend(label(1 "Support") label(2 "Alternatives") label (3 "Critique"))

* Table A4 and A5

asdoc tab PolicyArea OPPOSITION_Dummy, row replace
asdoc tab PolicyArea OPPOSITION_Dummy if Arena == 1, row
asdoc tab PolicyArea OPPOSITION_Dummy if Arena == 2, row

* Table A6

eststo clear
* effect of oversight institutions on critique
eststo: xi: logistic CRITIQUE_DUMMY inst_str_Winzen eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear i.PolicyArea, cluster(Country)

* effect of oversight institutions on alternatives
eststo: xi: logistic ALTERNATIVE_DUMMY inst_str_Winzen eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear i.PolicyArea, cluster(Country)

* interaction effect of oversight institutions and EU position on critique
eststo: xi: logistic CRITIQUE_DUMMY eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear c.inst_str_Winzen#c.eu_position i.PolicyArea i.Country, cluster(Country)

* interaction effect of oversight institutions and EU position on alternatives
eststo: xi: logistic ALTERNATIVE_DUMMY eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear c.inst_str_Winzen#c.eu_position i.PolicyArea i.Country, cluster(Country)

esttab using 1.rtf, replace margin label varwidth(30) eform se stats(r2_p N, fmt(a2) label("Pseudo R²" "Observations")) compress star (* 0.1 ** 0.05 *** 0.01) unstack nomtitles b(%9.3fc) note("Country-clustered robust standard errors in parentheses; Odds Ratios reported")

* Table A7

eststo clear
* effect of oversight institutions on critique
eststo: xi: logistic CRITIQUE_DUMMY inst_str_Winzen Mainstream_Eurosceptic_Party Government_Opposition_Party Seat_Share Arena lrgen electionyear i.PolicyArea, cluster(Country)
estadd local country_dummies "No"
estadd local policy_dummies "Yes"

* effect of oversight institutions on alternatives
eststo: xi: logistic ALTERNATIVE_DUMMY inst_str_Winzen Mainstream_Eurosceptic_Party Government_Opposition_Party Seat_Share Arena lrgen electionyear i.PolicyArea, cluster(Country)
estadd local country_dummies "No"
estadd local policy_dummies "Yes"

* interaction effect of oversight institutions and EU position on critique
eststo: xi: logistic CRITIQUE_DUMMY Mainstream_Eurosceptic_Party Government_Opposition_Party Seat_Share Arena lrgen electionyear c.inst_str_Winzen#c.Mainstream_Eurosceptic_Party i.PolicyArea i.Country, cluster(Country)
estadd local country_dummies "Yes"
estadd local policy_dummies "Yes"

* interaction effect of oversight institutions and EU position on alternatives
eststo: xi: logistic ALTERNATIVE_DUMMY Mainstream_Eurosceptic_Party Government_Opposition_Party Seat_Share Arena lrgen electionyear c.inst_str_Winzen#c.Mainstream_Eurosceptic_Party i.PolicyArea i.Country, cluster(Country)
estadd local country_dummies "Yes"
estadd local policy_dummies "Yes"


esttab using 1.rtf, replace margin label varwidth(30) eform se stats(r2_p N country_dummies policy_dummies, fmt(a2) label("Pseudo R²" "Observations" "Country FEs" "Policy area controls")) compress star (* 0.1 ** 0.05 *** 0.01) unstack nomtitles b(%9.3fc) keep(Government_Opposition_Party Mainstream_Eurosceptic_Party Seat_Share inst_str_Winzen Arena lrgen electionyear c.inst_str_Winzen#c.Mainstream_Eurosceptic_Party _cons) note("Country-clustered robust standard errors in parentheses; Odds Ratios reported")


* Table A8

eststo clear
* effect of oversight institutions on critique
eststo: xi: logistic CRITIQUE_DUMMY information eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear i.PolicyArea, cluster(Country)
estadd local country_dummies "No"
estadd local policy_dummies "Yes"

* effect of oversight institutions on alternatives
eststo: xi: logistic ALTERNATIVE_DUMMY information eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear i.PolicyArea, cluster(Country)
estadd local country_dummies "No"
estadd local policy_dummies "Yes"

* interaction effect of oversight institutions and EU position on critique
eststo: xi: logistic CRITIQUE_DUMMY eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear c.information#c.eu_position i.PolicyArea i.Country, cluster(Country)
estadd local country_dummies "Yes"
estadd local policy_dummies "Yes"

* interaction effect of oversight institutions and EU position on alternatives
eststo: xi: logistic ALTERNATIVE_DUMMY eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear c.information#c.eu_position i.PolicyArea i.Country, cluster(Country)
estadd local country_dummies "Yes"
estadd local policy_dummies "Yes"


esttab using 1.rtf, replace margin label varwidth(30) eform se stats(r2_p N country_dummies policy_dummies, fmt(a2) label("Pseudo R²" "Observations" "Country FEs" "Policy area controls")) compress star (* 0.1 ** 0.05 *** 0.01) unstack nomtitles b(%9.3fc) keep(Government_Opposition_Party eu_position Seat_Share information Arena lrgen electionyear c.information#c.eu_position _cons) note("Country-clustered robust standard errors in parentheses; Odds Ratios reported")

* Figure A7

twoway (scatter average_country_critique information, mlabel(Country) mlabposition(12))|| (scatter average_country_alternative information, mlabel(Country) mlabposition(12)) || (lfit average_country_critique information, mlabposition(12)) || (lfit average_country_alternative information, mlabposition(12)), ytitle(Share of critique/alternatives) legend(label(1 "Share of critique") label (2 "Share of alternatives"))

* Figure A8

xi: logistic CRITIQUE_DUMMY eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear c.information#c.eu_position i.PolicyArea i.Country, cluster(Country)
margins, dydx(information) at(eu_position=(1(1)7))
marginsplot, ytitle(Effects on linear prediction) title(Critique, size(medlarge))

* Figure A9

xi: logistic ALTERNATIVE_DUMMY eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear c.information#c.eu_position i.PolicyArea i.Country
margins, dydx(information) at(eu_position=(1(1)7))
marginsplot, ytitle(Effects on linear prediction) title(Alternatives, size(medlarge))

* Table A9

eststo clear
* effect of oversight institutions on critique
eststo: xi: logistic CRITIQUE_DUMMY constraints eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear i.PolicyArea, cluster(Country)
estadd local country_dummies "No"
estadd local policy_dummies "Yes"

* effect of oversight institutions on alternatives
eststo: xi: logistic ALTERNATIVE_DUMMY constraints eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear i.PolicyArea, cluster(Country)
estadd local country_dummies "No"
estadd local policy_dummies "Yes"

* interaction effect of oversight institutions and EU position on critique
eststo: xi: logistic CRITIQUE_DUMMY eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear c.constraints#c.eu_position i.PolicyArea i.Country, cluster(Country)
estadd local country_dummies "Yes"
estadd local policy_dummies "Yes"

* interaction effect of oversight institutions and EU position on alternatives
eststo: xi: logistic ALTERNATIVE_DUMMY eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear c.constraints#c.eu_position i.PolicyArea i.Country, cluster(Country)
estadd local country_dummies "Yes"
estadd local policy_dummies "Yes"


esttab using 1.rtf, replace margin label varwidth(30) eform se stats(r2_p N country_dummies policy_dummies, fmt(a2) label("Pseudo R²" "Observations" "Country FEs" "Policy area controls")) compress star (* 0.1 ** 0.05 *** 0.01) unstack nomtitles b(%9.3fc) keep(Government_Opposition_Party eu_position Seat_Share constraints Arena lrgen electionyear c.constraints#c.eu_position _cons) note("Country-clustered robust standard errors in parentheses; Odds Ratios reported")

* Figure A10

twoway (scatter average_country_critique constraints, mlabel(Country) mlabposition(12))|| (scatter average_country_alternative constraints, mlabel(Country) mlabposition(12)) || (lfit average_country_critique constraints) || (lfit average_country_alternative constraints), ytitle(Share of critique/alternatives) legend(label(1 "Share of critique") label (2 "Share of alternatives"))

* Figure A11

xi: logistic CRITIQUE_DUMMY eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear c.constraints#c.eu_position i.PolicyArea i.Country, cluster(Country)
margins, dydx(constraints) at(eu_position=(1(1)7))
marginsplot, ytitle(Effects on linear prediction) title(Critique, size(medlarge))

* Figure A12

xi: logistic ALTERNATIVE_DUMMY eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear c.constraints#c.eu_position i.PolicyArea i.Country
margins, dydx(constraints) at(eu_position=(1(1)7))
marginsplot, ytitle(Effects on linear prediction) title(Alternatives, size(medlarge))

* Table A10

eststo clear
* effect of oversight institutions on critique
eststo: xi: logistic CRITIQUE_DUMMY inst_str_Winzen eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear i.PolicyArea if POLICY_DUMMY == 1, cluster(Country)
estadd local country_dummies "No"
estadd local policy_dummies "Yes"

* effect of oversight institutions on alternatives
eststo: xi: logistic ALTERNATIVE_DUMMY inst_str_Winzen eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear i.PolicyArea if POLICY_DUMMY == 1, cluster(Country)
estadd local country_dummies "No"
estadd local policy_dummies "Yes"

* interaction effect of oversight institutions and EU position on critique
eststo: xi: logistic CRITIQUE_DUMMY eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear c.inst_str_Winzen#c.eu_position i.PolicyArea i.Country if POLICY_DUMMY == 1, cluster(Country)
estadd local country_dummies "Yes"
estadd local policy_dummies "Yes"

* interaction effect of oversight institutions and EU position on alternatives
eststo: xi: logistic ALTERNATIVE_DUMMY eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear c.inst_str_Winzen#c.eu_position i.PolicyArea i.Country if POLICY_DUMMY == 1, cluster(Country)
estadd local country_dummies "Yes"
estadd local policy_dummies "Yes"

esttab using 1.rtf, replace margin label varwidth(30) eform se stats(r2_p N country_dummies policy_dummies, fmt(a2) label("Pseudo R²" "Observations" "Country FEs" "Policy area controls")) compress star (* 0.1 ** 0.05 *** 0.01) unstack nomtitles b(%9.3fc) keep(Government_Opposition_Party eu_position Seat_Share inst_str_Winzen Arena lrgen electionyear c.inst_str_Winzen#c.eu_position _cons) note("Country-clustered robust standard errors in parentheses; Odds Ratios reported")

* Table A11

eststo clear
* effect of oversight institutions on critique
eststo: xi: logistic CRITIQUE_DUMMY inst_str_Winzen eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear i.PolicyArea if POLITY_DUMMY == 1, cluster(Country)
estadd local country_dummies "No"
estadd local policy_dummies "Yes"

* effect of oversight institutions on alternatives
eststo: xi: logistic ALTERNATIVE_DUMMY inst_str_Winzen eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear i.PolicyArea if POLITY_DUMMY == 1, cluster(Country)
estadd local country_dummies "No"
estadd local policy_dummies "Yes"

* interaction effect of oversight institutions and EU position on critique
eststo: xi: logistic CRITIQUE_DUMMY eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear c.inst_str_Winzen#c.eu_position i.PolicyArea i.Country if POLITY_DUMMY == 1, cluster(Country)
estadd local country_dummies "Yes"
estadd local policy_dummies "Yes"

* interaction effect of oversight institutions and EU position on alternatives
eststo: xi: logistic ALTERNATIVE_DUMMY eu_position Government_Opposition_Party Seat_Share Arena lrgen electionyear c.inst_str_Winzen#c.eu_position i.PolicyArea i.Country if POLITY_DUMMY == 1, cluster(Country)
estadd local country_dummies "Yes"
estadd local policy_dummies "Yes"


esttab using 1.rtf, replace margin label varwidth(30) eform se stats(r2_p N country_dummies policy_dummies, fmt(a2) label("Pseudo R²" "Observations" "Country FEs" "Policy area controls")) compress star (* 0.1 ** 0.05 *** 0.01) unstack nomtitles b(%9.3fc) keep(Government_Opposition_Party eu_position Seat_Share inst_str_Winzen Arena lrgen electionyear c.inst_str_Winzen#c.eu_position _cons) note("Country-clustered robust standard errors in parentheses; Odds Ratios reported")



